package com.zx.system.block.service;


import com.zx.core.wrapper.ListWrapper;
import com.zx.core.wrapper.ResponseWrapper;
import com.zx.system.block.model.SysMenu;
import com.zx.system.block.param.MenuParam;
import com.zx.system.block.vo.RouterVO;
import com.zx.system.block.vo.SysMenuVO;
import com.zx.system.block.vo.TreeVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * description: 业务层系统菜单(权限)服务 <br>
 * create: 2024-08-24 00:38
 * </p>
 *
 * @author zhou  xun
 */
public interface ISysMenuService {
    /**
     * 根据用户ID查询菜单树信息
     *
     * @return 菜单列表
     */
    List<RouterVO> selectMenuTreeByUserId();

    /**
     * 查询菜单列表
     *
     * @param menuParam 菜单参数
     * @return {@link ListWrapper<SysMenu>}
     * @author zhou  xun
     * @since 2024-12-15
     */
    ListWrapper<SysMenu> selectMenuList(MenuParam menuParam);

    /**
     * 查询菜单列表VO
     *
     * @param menuParam 菜单参数
     * @return {@link ListWrapper<SysMenuVO>}
     * @author zhou  xun
     * @since 2024-12-15
     */
    ListWrapper<SysMenuVO> selectMenuVOList(MenuParam menuParam);

    /**
     * 新增菜单
     *
     * @param menuParam 菜单参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-12-21
     */
    ResponseWrapper addMenu(MenuParam menuParam);

    /**
     * 编辑菜单
     *
     * @param menuParam 菜单参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-12-21
     */
    ResponseWrapper editMenu(MenuParam menuParam);

    /**
     * 修改菜单状态
     *
     * @param id     菜单ID
     * @param status 菜单状态
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-12-21
     */
    ResponseWrapper editMenuStatus(String id, Integer status);

    /**
     * 删除菜单
     *
     * @param menuId 菜单ID
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-12-21
     */
    ResponseWrapper deleteMenu(String menuId);

    /**
     * 获取菜单树
     *
     * @param menuParam 菜单树
     * @return {@link ListWrapper<TreeVO>}
     * @author zhou  xun
     * @since 2024-12-25
     */

    ListWrapper<TreeVO> getMenuTree(MenuParam menuParam);

    /**
     * 获取菜单信息Map 用于菜单信息匹配
     *
     * @return 包含菜单标识作为键，{@link SysMenu} 对象作为值的映射{@code Map<String, SysMenu>}
     * @author zhou  xun
     * @since 2024-12-28
     */
    Map<String, SysMenu> getMenu();

    /**
     * 查询菜单信息
     *
     * @param userId 用户id
     * @return {@link ListWrapper<SysMenu>}
     * @author zhou  xun
     * @since 2024-12-25
     */
    ListWrapper<SysMenu> selectSysMenuInfos(String userId);
}
